home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1994 March / Internet Info CD-ROM (Walnut Creek) (March 1994).iso / answers / comp / linux / howto / printing / part1 < prev    next >
Internet Message Format  |  1994-03-22  |  58KB

  1. Path: bloom-beacon.mit.edu!hookup!swrinde!emory!news-feed-2.peachnet.edu!concert!bigblue.oit.unc.edu!sunSITE!mdw
  2. From: gtaylor@cs.tufts.edu (Grant Taylor)
  3. Newsgroups: comp.os.linux.announce,comp.os.linux.admin,comp.answers,news.answers
  4. Subject: Linux Printing HOWTO (Part 1/2)
  5. Followup-To: poster
  6. Date: 16 Mar 1994 05:54:06 GMT
  7. Organization: The University of North Carolina at Chapel Hill
  8. Lines: 1329
  9. Approved: linux-announce@tc.cornell.edu (Matt Welsh)
  10. Message-ID: <2m66tu$onm@bigblue.oit.unc.edu>
  11. NNTP-Posting-Host: calzone.oit.unc.edu
  12. Summary: HOWTO on printing under Linux
  13. Keywords: Linux, printing, lpr
  14. Originator: mdw@sunSITE
  15. Xref: bloom-beacon.mit.edu comp.os.linux.announce:1958 comp.os.linux.admin:5620 comp.answers:4189 news.answers:16458
  16.  
  17. Archive-name: linux/howto/printing/part1
  18. Last-Modified: 22 Feb 94
  19.  
  20.                        The Linux Printing-HOWTO
  21.  
  22.                A guide to printing and previewing files
  23.                under the Linux operating system.
  24.  
  25.          Copyright (C) 1994 by Grant Taylor and Brian McCauley
  26.  
  27. Contents
  28. --------
  29.  
  30. 1 Intro
  31. 2 Printing software
  32. 2.1 text
  33. 2.2 pr
  34. 2.3 PostScript
  35. 2.4 fonts
  36. 2.5 faxing
  37. 2.6 *roff, man pages
  38. 2.7 Printing text via PostScript
  39. 2.7.1 mpage
  40. 2.7.2 a2ps
  41. 2.7.3 enscript
  42. 2.7.4 gslp
  43. 2.8 PostScript utilities
  44. 2.9 TeX/dvi
  45. 2.9.1 `dvips'
  46. 2.9.2 `eps'
  47. 2.9.3 `dvilj'
  48. 2.10 texinfo
  49. 2.11 Printing though a terminal
  50. 2.12 hardware and drivers
  51. 2.13 Printer device names
  52. 3 LPR
  53. 3.1 Setting up print services
  54. 3.1.1 Remote Printing Vs. Local Printing
  55. 3.1.2 What You Need
  56. 3.1.3 How Printing Works Under Linux
  57. 3.1.4 The important programs
  58. 3.1.5 The `lpr' Command
  59. 3.1.6 The `lpq' Command
  60. 3.1.7 The `lprm' Command
  61. 3.1.8 The `lpc' Command
  62. 3.1.9 The Important Directories
  63. 3.1.10 The Important Files
  64. 3.1.11 More About /etc/printcap
  65. 3.1.12 Fields in `/etc/printcap'
  66. 3.1.13 More on The `lp' Field
  67. 3.1.14 More On The lf Field
  68. 3.1.15 More On The if Field
  69. 3.1.16 More On The `rm' and `rp' Fields
  70. 3.1.17 More On The `sh' and `sf' Fields
  71. 3.1.18 More On The `mx' Field
  72. 3.1.19 A Test Printcap Entry
  73. 3.1.20 Putting It All Together
  74. 3.1.21 More On Remote Printing
  75. 3.1.22 The Fiddly Bits
  76. 3.1.23 Troubleshooting
  77. 3.2 What lpr and lpd do
  78. 3.3 Getting hold of lpd
  79. 3.4 Where Do The Files Go And What Should Their Permissions Be?
  80. 3.5 lpd not working
  81. 3.6 Where Do I Get A Printcap For Printer Model xxxxx?
  82. 3.7 The Semantics of `/etc/printcap'
  83. 3.8 The Syntax of `/etc/printcap'
  84. 3.9 An `/etc/printcap' gotcha
  85. 3.10 The Minimum /etc/printcap
  86. 3.11 How to prevent the `Staircase Effect'
  87. 3.12 Resetting the printer between each file printed
  88. 3.13 Preventing formfeed after each file printed
  89. 3.14 Printing with lpd to a serial port
  90. 3.15 cat works to the serial port, but not lpd (1)
  91. 3.16 Printers that are not simple devices
  92. 3.17 Generating burst or banner pages
  93. 3.18 Spooling text to a PostScript printer
  94. 3.19 Why graphics files are sometines truncated
  95. 3.20 Why `lpr -i' doesn't work
  96. 3.21 Why `lpr -p' doesn't work?
  97. 3.22 `lpc' and `lpq' warning of missing daemons
  98. 3.23 Using `lpr' over a network
  99. 3.24 Writing lpd filters
  100. 3.25 Debuging lpd filters
  101. 3.26 Output (`of') filters
  102. 3.27 Getting filters for given printers
  103. 3.28 Filters from programs that won't read STDIN
  104. 3.29 Having many filters
  105. 3.30 Magic Filters
  106. 3.31 Magic Filter Examples
  107. 4 Previewing
  108. 4.1 ghostview
  109. 4.2 gspreview
  110. 4.3 xdvi
  111. 4.4 xtex
  112. 4.5 gxditview
  113. 4.6 non-X previewing
  114. 5 Ascii Translation
  115. 5.1 from TeX
  116. 5.2 from dvi
  117. 5.3 from PostScript
  118. 5.4 from troff
  119. 5.5 from ascii/latin1
  120.  
  121. 1 Intro
  122. *******
  123.  
  124.    This is the Printing HOWTO for Linux.  This is a member of the second
  125. generation of Linux FAQs.  The original Linux FAQ gradually became a
  126. monolithic beast, and has now been re-written in a new syle, refering to
  127. HOWTOs for details.  This HOWTO details how to properly set up most
  128. types of printers, how to configure software to make them print well,
  129. what types of fax software are available, and how to preview many types
  130. of printable output. It was originally written by Grant Taylor
  131. <gtaylor@cs.tufts.edu> and later incorporated the lpd-FAQ by Brian
  132. McCauley <B.A.McCauley@bham.ac.uk>. Other HOWTOs detail networking,
  133. kernel hacking, etc.  All HOWTOs are found in several places, the
  134. official location being:
  135. `sunsite.unc.edu:/pub/Linux/docs/HOWTO'
  136.  
  137.    Like just about any usenet FAQs they can also be found on
  138. `rtfm.mit.edu'.
  139.  
  140.    Please send comments, bug reports, etc, to
  141. <printing@god.ext.tufts.edu>.  This address goes to both Brian and
  142. Grant.
  143.  
  144.    If you know anything or can point us towards any useful programs not
  145. in this document that should be, please let us know!
  146.  
  147.    Grant has a mail server set up on his machine.  It stores documents
  148. and other things related to printing and previewing with Linux,
  149. including the latest and greatest version of this document. At some
  150. point in the future this will probably be superceded by our own
  151. directory on one of the major ftp servers. Mail to
  152. <listserv@god.ext.tufts.edu> with a body of `info' will have you sent a
  153. list of available files.  A body of `get file1 [file2 file3... ]' will
  154. send you specific files.
  155.  
  156.    Summary of changes
  157.  
  158.    * Now in texinfo! Available from sunsite in texinfo, dvi and text
  159.      forms. The info form may be read in emacs but less you are a real
  160.      emacsphile or don't have X then you'd probably be better off using
  161.      `tkinfo'.
  162.  
  163.      `tkinfo' is available by anonymous ftp from:
  164.      `ptolemy.eecs.berkeley.edu:pub/misc'
  165.      `harbor.ecn.purdue.edu:pub/tcl/code'
  166.  
  167.      The ptolemy site will always have the latest version.
  168.  
  169.    * New mailserver info.
  170.  
  171.    * Much dead-wood removed.
  172.  
  173.    * Attributions on individual sections do not appear in the final
  174.      version although they do in the texinfo source.
  175.  
  176.    * Assorted little changes
  177.  
  178.    * Incorporated Karl Auer's <Karl.Auer@anu.edu.au> document. This is
  179.      still not seemless so you'll likely find some duplication and
  180.      missing cross references - please let us know.
  181.  
  182. 2 Printing software
  183. *******************
  184.  
  185.    These sections describe printing software known to be available for
  186. Linux.  Note that most Un*x printing software can be easily compiled
  187. under Linux.
  188.  
  189. 2.1 text
  190. ========
  191.  
  192.    Under Linux, or under most any Un*x operating system, the easiest
  193. thing to print with most printers is plain ASCII.  Any way you can
  194. arrange to send the text to the printer is perfectly valid.  If you
  195. have a serial printer, then try devices `/dev/ttyS?', `/dev/ttys?',
  196. `/dev/cua?', etc, and if you have a regular parallel hookup, use
  197. `/dev/lp?'.  Typing `cat FILE >/dev/????' should do it.  You may need
  198. root privileges, or you may wish to chmod your printer device if this
  199. is all you ever print.  (Note the security hole there if you've more
  200. than one user) Some printers (ie, HP DeskJet) want dos-style end of
  201. lines: newline+carriage return.  These printers will show the
  202. 'staircase effect'. See Also: The staircase effect.
  203.  
  204. 2.2 pr
  205. ======
  206.  
  207.    Most plain ascii files in the un*x world have a tendency to be just
  208. that - plain, unformatted ascii with no page breaks or anything else to
  209. make a printed copy look nice and not have lines printed over
  210. perferations.  The answer to this problem is to run your text through a
  211. formatter such as pr.  Pr is a standard un*x utility designed to format
  212. plain text for printing on a line printer.  The usual appearance of the
  213. resulting formatted text has a header and/or footer, page numbers, the
  214. date, possibly margins, double spacing, etc.  As is common with un*x
  215. utils, pr has a bazillion options.  They are detailed in the man page.
  216.  
  217. 2.3 PostScript
  218. ==============
  219.  
  220.    Printing almost anything other than plain text under Un*x usually
  221. involves the ability to print PostScript.  If you have a PostScript
  222. printer, you're all set.  But for most, this is not so easy.
  223.  
  224.    The established way to interpret PostScript under Linux is to use
  225. ghostscript, which, like nearly everything else, comes from the GNU
  226. project.  Ghostscript is a PostScript interpreter which accepts
  227. PostScript input and generates output appropriate for X displays, most
  228. printers, some specialized display hardware, and fax software.
  229.  
  230.    The following devices are available as of ghostscript 2.6.1pl4:
  231.              linux   PC vga using linux svgalib
  232.      #       x11     X Windows version 11, release >=4   [Unix and VMS only]
  233.      # Printers:
  234.      # *     appledmp  Apple Dot Matrix Printer (Imagewriter)
  235.      #       bj10e   Canon BubbleJet BJ10e
  236.      # *     bj200   Canon BubbleJet BJ200
  237.      # *     cdeskjet  H-P DeskJet 500C with 1 bit/pixel color
  238.      # *     cdjcolor  H-P DeskJet 500C with 24 bit/pixel color and
  239.      #               high-quality color (Floyd-Steinberg) dithering
  240.      # *     cdjmono  H-P DeskJet 500C printing black only
  241.      # *     cdj500  H-P DeskJet 500C (same as cdjcolor)
  242.      # *     cdj550  H-P DeskJet 550C
  243.      # *     declj250  alternate DEC LJ250 driver
  244.      # +     deskjet  H-P DeskJet and DeskJet Plus
  245.      # *     dfaxhigh  DigiBoard, Inc.'s DigiFAX software format
  246.      # *     dfaxlow  DigiFAX low (normal) resolution
  247.      #       djet500  H-P DeskJet 500
  248.      # *     djet500c  H-P DeskJet 500C
  249.      #       epson   Epson-compatible dot matrix printers (9- or 24-pin)
  250.      # +     eps9high  Epson-compatible 9-pin, interleaved lines
  251.      #               (triple resolution)
  252.      # *     epsonc  Epson LQ-2550 and Fujitsu 3400/2400/1200 color printers
  253.      # *     escp2   Epson ESC/P 2 language printers, including Stylus 800
  254.      # +     ibmpro  IBM 9-pin Proprinter
  255.      # *     jetp3852  IBM Jetprinter ink-jet color printer (Model #3852)
  256.      # +     laserjet  H-P LaserJet
  257.      # *     la50    DEC LA50 printer
  258.      # *     la75    DEC LA75 printer
  259.      # *     lbp8    Canon LBP-8II laser printer
  260.      # *     ln03    DEC LN03 printer
  261.      # *     lj250   DEC LJ250 Companion color printer
  262.      # +     ljet2p  H-P LaserJet IId/IIp/III* with TIFF compression
  263.      # +     ljet3   H-P LaserJet III* with Delta Row compression
  264.      # +     ljet4   H-P LaserJet 4 (defaults to 600 dpi)
  265.      # +     ljetplus  H-P LaserJet Plus
  266.      # *     m8510   C.Itoh M8510 printer
  267.      # *     necp6   NEC P6/P6+/P60 printers at 360 x 360 DPI resolution
  268.      # *     nwp533  Sony Microsystems NWP533 laser printer   [Sony only]
  269.      # *     oki182  Okidata MicroLine 182
  270.      #       paintjet  H-P PaintJet color printer
  271.      # *     pj      alternate PaintJet XL driver
  272.      # *     pjxl    H-P PaintJet XL color printer
  273.      # *     pjxl300  H-P PaintJet XL300 color printer
  274.      # *     r4081   Ricoh 4081 laser printer
  275.      # *     sparc   SPARCprinter
  276.      # *     t4693d2  Tektronix 4693d color printer, 2 bits per R/G/B component
  277.      # *     t4693d4  Tektronix 4693d color printer, 4 bits per R/G/B component
  278.      # *     t4693d8  Tektronix 4693d color printer, 8 bits per R/G/B component
  279.      # *     tek4696  Tektronix 4695/4696 inkjet plotter
  280.      #%*     trufax  TruFax facsimile driver  [Unix only]
  281.      # File formats and others:
  282.      #       bit     A plain "bit bucket" device
  283.      #       bmpmono Monochrome MS Windows .BMP file format
  284.      #       bmp16   4-bit (EGA/VGA) .BMP file format
  285.      #       bmp256  8-bit (256-color) .BMP file format
  286.      #       bmp16m  24-bit .BMP file format
  287.      #       gifmono Monochrome GIF file format
  288.      #       gif8    8-bit color GIF file format
  289.      #       pcxmono Monochrome PCX file format
  290.      #       pcxgray 8-bit gray scale PCX file format
  291.      #       pcx16   Older color PCX file format (EGA/VGA, 16-color)
  292.      #       pcx256  Newer color PCX file format (256-color)
  293.      #       pbm     Portable Bitmap (plain format)
  294.      #       pbmraw  Portable Bitmap (raw format)
  295.      #       pgm     Portable Graymap (plain format)
  296.      #       pgmraw  Portable Graymap (raw format)
  297.      #       ppm     Portable Pixmap (plain format)
  298.      #       ppmraw  Portable Pixmap (raw format)
  299.      # *     tiffg3  TIFF/F (G3 fax)
  300.  
  301.    Lines beginning with a `#' are drivers included with the gs261
  302. source distribution.
  303.  
  304.    Drivers marked with `%' require commercial software to work
  305.  
  306.    Installations of ghostscript are available from several places:
  307.  
  308.    A full, and presumably correct, installation comes with most
  309. distributions.  Note that this binary installation may require
  310. `libX.so.???', as it includes the X11 display driver.
  311.  
  312.    The "official" installation is to obtain the sources and build it
  313. yourself:
  314.  
  315.    `prep.ai.mit.edu:/pub/gnu/ghostscript-xxxx.tar.gz'
  316. `prep.ai.mit.edu:/pub/gnu/ghostscript-fonts-xxxx.tar.gz'
  317.  
  318.    This is probably best, as you can get the latest version (currently
  319. 2.6.1pl4 (the four patches are separate, they are available from my
  320. mail-server as `gs261-patches')).
  321.  
  322.    A patch which uses the Linux svgalib, and hence does not require X
  323. for previewing is available. See Also: non-X previewing.
  324.  
  325.    A minimal binary installation of ghostscript and several other
  326. packages needed for printing the Linux documentation is available as:
  327. `sunsite.unc.edu:/pub/Linux/apps/tex/texmin/texmin-0.1.tar.z'.
  328.  
  329.    Note that this does not contain any PostScript fonts.  (Nor do you
  330. need them to print dvi (aka [La]TeX).)
  331.  
  332.    The main Ghostscript documentation is contained in the file
  333. `use.doc', either in the source directory, or
  334. `lib/ghostscript/doc/use.doc' if you haven't the sources.
  335.  
  336.    To print ps, first determine your driver name with `gs -help' which
  337. lists installed drivers.  If the device you need is not listed, you
  338. must compile gs yourself from the source distribution (do not panic.
  339. Do follow the instructions in make.doc.  You will need 5 or 6 megs of
  340. space to build it in.)  Then type `gs -dNOPAUSE -sDEVICE=??????
  341. -sOutputFile=/dev/???? file.ps' and your output should (hopefully)
  342. appear at your printer.  Those of you with non-US paper sizes may wish
  343. to build gs yourself with the right default, or you may use the
  344. `-sPAPERSIZE=a4' option.
  345.  
  346.    Ghostscript may be used to print at most of the resolutions your
  347. printer supports; `-r300', `-r150', `-r360x180' are examples of the
  348. option used to control this.  Dot matrix printers in particular need to
  349. choose an appropriate resolution, since they do not typically run at
  350. the more standard 300dpi.  Note that versions 2.6 and greater of
  351. ghostscript have more drivers.
  352.  
  353. 2.4 fonts
  354. =========
  355.  
  356.    (This section contains font information not specific to any
  357. ghostscript driver, nor even specific to ghostscript).  Font
  358. information pertaining to the X11 `gs' drivers (and thus to ghostview)
  359. is included in the ghostview section under previewing)
  360.  
  361.    All versions of ghostscript come with assorted public-domain fonts,
  362. most of which were generated from bitmaps, and are therefore of
  363. relatively poor quality.  However, ghostscript can use any PostScript
  364. Type 1 or 3 fonts you may have handy.  For example, the Adobe Type
  365. Manager (for any platform other than mac) comes with fonts you can use.
  366. Place the fonts (typically *.pc?) in `lib/ghostscript/fonts/' and add
  367. to `lib/ghostscript/Fontmap' lines such as:
  368.  
  369.      /Courier             (com_____.pfb) ;
  370.  
  371.    A full fontmap file for the ususal set of fonts included with the
  372. Adobe Type Manager is available as `fontmap.atm' from the printing
  373. mailserver.
  374.  
  375.    TimesNewRomanPS and ArialMT fonts are interchangable with Times Roman
  376. and Helvetica, so you can alias them this way if this is what you have.
  377.  
  378.    Adobe Type 1 fonts may be found on the net in several places:
  379. `ftp.cica.indiana.edu:/pub/pc/win3/fonts'
  380. `archive.umich.edu:/msdos/mswindows/fonts'
  381.  
  382.    I have not looked in these places, but this information is lifted
  383. straight from the comp.fonts FAQ (which you should read if fonts are a
  384. thing for you.  You can get a copy of this from `rtfm.mit.edu').
  385.  
  386.    Conversion between various font types is tricky.  Ghostscript comes
  387. with the tools needed to take a bitmap (hopefully large) and make a
  388. scalable ps font.  Groff comes with the tools to allow use of tfm/mf
  389. (TeX) and pfb (Type 1) fonts in *roff documents.  X11R5 includes
  390. several font utilities and Type 1 rendering code contributed by IBM.  I
  391. have used none of the above, but they all come with manpages, so read
  392. them.  Other font conversion utilities are listed in the comp.fonts
  393. FAQ.  Also look into the package fontutils on
  394. `prep.ai.mit.edu:/pub/gnu/'.
  395.  
  396. 2.5 faxing
  397. ==========
  398.  
  399.    If you have a fax modem, you can arrage to fax things out (and in),
  400. including PostScript, dvi, ascii, etc...  Arranging for e-mail to fax
  401. itself somewhere is also straightforward.
  402.  
  403.    Fax modems support one of of two cammand sets: Class 1 or 2.  Class
  404. one modems are have less of what goes on in a fax supported in firmware
  405. (thus the software has to do more.  Supporting such timing-critical
  406. things under a preemptive multitasking environment like Linux is tricky
  407. at best).  The class 1 standard is EIA 578.  Class 2 modems tend to be
  408. more expensive and comply with the standard EIA 592.  Mention of your
  409. fax modem's level of support should be in its manuals.  Do not confuse
  410. class and group.  You will, of course, want a group III fax modem.
  411.  
  412.    Fax software which runs under Linux must convert input in whatever
  413. format into a Group III compatible image format for transmission.  As
  414. usual, Ghostscript does the job.  The device tiffg3 generates standard
  415. g3/tiff encoded fax messages.  You must compile this device in if it is
  416. not there already; this is yet another reason to get the source.  Some
  417. fax sofware on commercial platforms can use the display PostScript
  418. renderer to render the fax image; this is not yet an option under Linux.
  419.  
  420.    The GNU program netfax supports Class 2 fax modems only.  It builds
  421. nearly out of the box under linux.  I have patches for version 3.2.1;
  422. you can get them from the printing mail server as `netfaxpatch'.  It
  423. runs a server and accepts jobs into a queue from the local machine and
  424. the net.  Netfax is in use at MIT.  It accepts PostScript, dvi, and
  425. ascii, and can be configured to work as an email gate.  Documentation
  426. in the package is limited to compile notes and man pages for the
  427. individual programs; actual installation tips are few and far between.
  428. `prep.ai.mit.edu:/pub/gnu/fax-3.2.1.tar.gz'
  429.  
  430.    FlexFax is available from:
  431. `sgi.com(192.48.153.1):/sgi/fax/?????.src.tar.Z'
  432.  
  433.    It is written in C++, and thus requires g++ to build.  FlexFax
  434. supports class 1 and 2 modems, uses ghostview (or a display PostScript
  435. server) for rendering, and generally is more complete, or at least
  436. general than the somewhat MIT-specific netfax.  It also can run in
  437. place of getty and either receive a fax or spawn a login as appropriate
  438. for the type of call.  It includes precise instructions on configuring
  439. smail3, sendmail, and other mail agents to send mail for
  440. so-and-so@12345678.fax to the fax at 12345678.  This is the package I
  441. recommend if you have real faxing needs, as it is properly documented
  442. and full-featured.  Version 2.x of FlexFax is in real release now and
  443. fully supports Linux - just type `./configure' and `make'.
  444.  
  445.    mgetty+sendfax is a Linux and SCO-specific getty for faxmodems and a
  446. simple sendfax program.  This package is available as
  447. `sunsite.unc.edu:/pub/Linux/system/Serial/mgetty+sendfax-0.16.tar.gz'.
  448. This is a good package for those who need to send a fax every now and
  449. then.
  450.  
  451.    Finally, `efax' deserves mention.  Class 2 only.  no net, no mail,
  452. just send a tiff.  Efax is available as:
  453. `sunsite.unc.edu:/pub/Linux/apps/comm/efax05.tar.gz'
  454.  
  455. 2.6 *roff, man pages
  456. ====================
  457.  
  458.    Man pages can sometimes be printed straight from the cat pages (in
  459. lieu of the normal nroff source pages) as though they were a normal
  460. text file (which they mostly are).  However, many printers do not like
  461. the control characters for highlighting and what not that is imbedded
  462. in these.  A filter for this purpose comes with the net-2 lpd package.
  463.  
  464.    If you have the nroff source to the page (the finding of which I
  465. highly recommend) you can say `man -t foobar | lpr' and your man
  466. program will (hopefully) format the man page using groff into
  467. PostScript, which will then be sent to your lpd and on to the printer.
  468. This form of man page output looks MUCH better than the plain ASCII
  469. version.  Unfortunately, this depends very much on which man program
  470. and what supporting software you have installed.  If your man doesn't
  471. do this, you might try the perl version of man, available near:
  472. `sunsite.unc.edu:/pub/Linux/system/Manual-pagers/'
  473.  
  474.    It is written entirely in perl, and is thus easily customizable (perl
  475. being an interpreted language reminiscent of C and sh).
  476.  
  477.    You can also find the nroff source file in the man directories (most
  478. versions of man have an option to just spit out the filename) and do it
  479. yourself, into any format supported by groff.
  480.      groff -mandoc -TTYPE foobar.1 | lpr
  481.  
  482.    Where TYPE is one of `ascii', `dvi', `ps', `X100', `X75', `latin8'.
  483.  
  484. 2.7 Printing text via PostScript
  485. ================================
  486.  
  487.    There are a number of utilities to allow text to be printed to a
  488. PostScript device.
  489.  
  490. 2.7.1 mpage
  491. -----------
  492.  
  493.    The package mpage converts plain text into PostScript and/or prints
  494. more than one page onto each peice of paper given PostScript or text.
  495. It is available at (or at least near):
  496. `wuarchive.wustl.edu:/pub/mirrors/unix-c/PostScript/mpage.tar-z'
  497.  
  498.    Note that wuarchive uses the `-z' suffix to mean `.Z', ie,
  499. `compress', not `gzip' or `freeze'. `man -t foobar | mpage' will send a
  500. 2-up (depending on the environment variable MPAGE) version of the man
  501. page to lpr and its PostScript interpreter.  This saves paper and
  502. speeds up printing.
  503.  
  504. 2.7.2 a2ps
  505. ----------
  506.  
  507.    A2ps will take ASCII and turn it into a nice PostScript document with
  508. headers and footers and page numbers, printed two pages on one (or
  509. otherwise, if you say so).  A2ps does a very nice job at this.  It is
  510. available at the same place mpage is.  Not that if you have a deskjet,
  511. many n-up programs will run into trouble by trying to print in that last
  512. half-inch.
  513.  
  514. 2.7.3 enscript
  515. --------------
  516.  
  517.    Enscript is a program which does basically the same thing as a2ps.  I
  518. do not know where to get it.  It comes with most commercial Un*ces.
  519.  
  520.    A clone version of enscript is called nenscript, available on
  521. `sunsite.unc.edu' as:
  522. `/pub/Linux/system/Printing/nenscript-1.13++.bin.tar.z'
  523. `/pub/Linux/system/Printing/nenscript-1.13++.tar.z'
  524.  
  525. 2.7.4 gslp
  526. ----------
  527.  
  528.    Gslp is one of the uilities which comes with ghostscript 2.6.x and
  529. purports to do the same ascii => ps conversion as enscript and a2ps.  I
  530. have not used it, but the docs say that
  531.  
  532.      gs -q -sDEVICE=????? -dNOPAUSE -- gslp.ps TEXT.FILE [OPTIONS]
  533.  
  534.    should do the trick.  (`gslp.ps' is the actual program, which is
  535. written in PostScript.  Here it is run with the argument TEXT.FILE.
  536. PostScript is in many respects a programming language more than a mere
  537. printer command language.)  Further documentation is in the file
  538. `gslp.ps'.  There is a script file which does the above for you.
  539.  
  540. 2.8 PostScript utilities
  541. ========================
  542.  
  543.    Those of you who deal with large amounts of PostScript may wish for
  544. more utility programs.  There are probably millions of little programs
  545. which do things to your PostScript. A representative package of them
  546. may be found in:
  547. `achilles.doc.ic.ac.uk:/tex/inter/psutils/'
  548. `ftp.cs.psu.edu:/pub/src/psutil.tar.gz'
  549.  
  550.    These handle page selection, double-sided printing, booklet creation,
  551. etc.  Most large ftp sites (eg, `wuarchive.wustl.edu', `ftp.uu.uunet')
  552. will have many such packages to choose from.
  553.  
  554. 2.9 TeX/dvi
  555. ===========
  556.  
  557.    [La]TeX is the text formatting package used by many in the academic
  558. world and elsewhere.  TeX works much like any other compiler - source
  559. code is run through the program `tex' to become a `.dvi' file
  560. (analogous to an .o object file in C) which can be further manipulated
  561. to produce printed output (a "binary").  This manipulation of a dvi
  562. (DeVice Independant) file usually takes a little bit of doing.  It is
  563. well worth it; TeX's output is of professional quality.
  564.  
  565.    If all you are given is a file with a `.tex' ending, try either `tex
  566. file.tex' or `latex file.tex'.  One of these is bound to work.  Then
  567. you have a dvi.  (You may have to run it twice for indexing)
  568.  
  569.    For those in the real world who cannot afford a dvi understanding
  570. printer, it is usually necessary to convert the dvi something the
  571. printer understands. These programs may be run manualy but are often
  572. built into lpd filters. See Also: Writing lpd filters.
  573.  
  574. 2.9.1 `dvips'
  575. -------------
  576.  
  577.    `dvips' converts dvi into PostScript that you can pipe into
  578. ghostscript or send to a PostScript printer.  Most installations come
  579. with functioning installations of both TeX and `dvips'.  Typing `dvips
  580. -f1 file.dvi | lpr' will do it.  `dvips' responds to either command line
  581. arguments or a file `/usr/TeX/lib/tex/ps/config.ps' (in the usual TeX
  582. layout, at least) in which you can arrange to have dvips automatically
  583. send its output to `lpr'.  Thus `dvips file.dvi' will do everything
  584. that needs to be done.
  585.  
  586.    Note that some `.dvi''s may include PostScript graphics in the
  587. `dvips' stage rather than the TeX stage of the game; if they are not
  588. found, you will get a hole instead of a picture.  This follows
  589. naturally from the object file analogy above.  Usually, pre-made
  590. documentation in this form has a makefile or script to do everything for
  591. you.  The LILO documentation is an example of this.
  592.  
  593.    `dvips' has several interesting options; for example, `dvips -r1
  594. file.dvi' will print it out backwards.  We deskjet users love this one.
  595.  
  596. 2.9.2 `eps'
  597. -----------
  598.  
  599.    Eps is a program which converts dvi files directly into the standard
  600. Epson printer language; thus it is a dvi driver for epsons.  I beleive
  601. it supports MakeTeXPK, the automatic font rendering system used by many
  602. dvi drivers, and is available as:
  603. `sunsite.unc.edu:/pub/Linux/apps/tex/eps-061.tar.gz'
  604. `ftp.ctd.comsat.com:/pub/'
  605.  
  606.    Note that it is still coming out with new versions fairly often, so
  607. there may be a newer version than 061.
  608.  
  609. 2.9.3 `dvilj'
  610. -------------
  611.  
  612.    For LaserJet owners, there is a separate program that will take dvi
  613. and convert it directly into your printer's language (PCL).  It is
  614. called dvilj2p or dvilj, and if not on tsx or sunsite, is certainly
  615. available on ftp.uu.net.
  616.  
  617.    (Description by Nils Rennebarth)
  618.  
  619.      Its a nice driver, but a little out of fashion in the sense that
  620.      configuration (especially of font-paths) font-paths is not very
  621.      flexible and that it doesn't support virtual fonts (at least the
  622.      version 0.51 not).  The biggest advantage over the
  623.      dvips/ghostscript combo is that it uses downloadable fonts which:
  624.         * reduces data transmission to the printer drastically, which
  625.           makes the printer usable even on a serial line.
  626.  
  627.         * reduces printer-memory-requirements drastically. A standard
  628.           Laserjet with 512k memory is able to print almost every
  629.           TeX-document.
  630.  
  631.      It has support for double side printing and most options you
  632.      expect a driver to have. It compiles cleanly and worked flawlessly
  633.      on our diverse hardware here.
  634.  
  635. 2.10 texinfo
  636. ============
  637.  
  638.    This is the native documentation format of the GNU project.  Emacs
  639. can be coerced into producing an info file from TeXinfo, and TeX can
  640. produce nice printed documantation from the same file.  It is a bit of
  641. a stretch for both systems, but it works.  It is really just TeX source
  642. which expects the macro file `texinfo.tex' to be installed on your
  643. system.  Just do `tex FILENAME' twice (for index generation purposes),
  644. and you end up with a plain dvi file, to print or preview at your
  645. leisure.
  646.  
  647.    In Emacs, you can also do `M-x texinfo-format-buffer' to convert the
  648. texinfo file into an info file viewable with Emacs `M-x info' or an info
  649. viewer of your choice.
  650.  
  651.    There are also separate programs which read and format info from a
  652. texinfo file.  These are available in:
  653. `prep.ai.mit.edu:/pub/gnu/'
  654.  
  655. 2.11 Printing though a terminal
  656. ===============================
  657.  
  658.    Many terminals and terminal emulators support the connection of a
  659. printer.  The computer the terminal is conected to may then use a
  660. standard set of escape sequences to operate this printer.  DEC VT's and
  661. most other ANSI terminals should offer this capability.
  662.  
  663.    A simple shell script will enable you to print a text file using the
  664. printer connected to your terminal:
  665.  
  666.      #!/bin/csh -f
  667.      # Transparent printing on a vt100-compatible terminal.
  668.      echo -n \[5i ; cat $* ; echo -n \[4i
  669.  
  670.    If this script is called `vtprint', then `vtprint [FILENAME
  671. [FILENAME]]' will print file(s) (or stdin if no file were specified) on
  672. your printer.
  673.  
  674. 2.12 hardware and drivers
  675. =========================
  676.  
  677.    There are two ways the kernel driver may be used to run the parallel
  678. ports.  One, the original, is the polling driver.  The other is the
  679. interrupt driver.  In principle, the interrupt driver only deals with
  680. the port when it gets an interrupt and should therefore be more
  681. efficient.  In practice, people have found that it depends on the
  682. machine.  It probably doesn't make too much difference in most
  683. situations.
  684.  
  685.    For the polling driver, you may adjust its polling frequency with the
  686. program tunelp without kernel twiddling. The actual driver is in the
  687. kernel source file `lp.c'.
  688.  
  689.    To choose the interrupt driver rather than the polled, use the
  690. program tunelp to set it.  (tunelp is available on sunsite, or from the
  691. printing mail server.)  Just put the appropriate line in `/etc/rc.local'
  692.  
  693.    Seven is the usual "LPT1:" IRQ, 5 is usual for "LPT2:" for an AT
  694. class machine.  Note that if your printer is on lp0, the interrupt
  695. driver will probably not work.  The first parameter should already
  696. contain the correct i/o base address.  Many bios boot screens have this
  697. information if you need it.
  698.  
  699.    DOS uses a polling driver so if you find that your printer works in
  700. DOS but not in Linux then you should try the polling driver.
  701.  
  702.    `tunelp' is available from the printing mail server or:
  703. `sunsite.unc.edu:/pub/Linux/system/Printing/tunelp-1.0.tar.z'
  704.  
  705. 2.13 Printer device names
  706. =========================
  707.  
  708.    On an XT bus system `LPT1:' becomes `/dev/lp0' (major=6, minor=0),
  709. on an AT `LPT1:' becomes `/dev/lp1' (major=6, minor=1). To be more
  710. precise:
  711.  
  712.      Name Major Minor I/O address
  713.       lp0   6     0       0x3bc
  714.       lp1   6     1       0x378
  715.       lp2   6     2       0x278
  716.  
  717.    For a serial printer use the `/dev/ttyS?' (or `/devttys?', if you
  718. follow that scheme) device, not the `/dev/cua?'  device. The
  719. `/dev/ttyS?' devices have major 4; the `/dev/cua?' devices have major 5.
  720.  
  721. 3 LPR
  722. *****
  723.  
  724.    This chapter used to the the `lpd-FAQ' then it became part of the
  725. `Linux-FAQ' and now it is part of the Printing-HOWTO. Who knows where
  726. it will go next?
  727.  
  728. 3.1 Setting up print services
  729. =============================
  730.  
  731.    This section was originally writen Karl Auer <Karl.Auer@anu.oedu.au>
  732. 1/11/93 and has now been included here because it was felt that the
  733. Printing-HOWTO, being written in the style of a reference manual, was
  734. not doing its job properly, since it did not describe in a
  735. straightforward way what you need to do to set up print services on your
  736. Linux machine.
  737.  
  738.    So far it has been included with little modification and may
  739. replicate or even contradict information elsewhere in the HOWTO.  The
  740. overview it gives should nevertheless be very useful to those new to
  741. bsd print spooling.
  742.  
  743. 3.1.1 Remote Printing Vs. Local Printing
  744. ----------------------------------------
  745.  
  746.    Remote printing is allowing people to send print jobs to your
  747. computer from another computer. This will be needed if, for example,
  748. you are running as a server in a network, or if a printer attached to
  749. your machine is to be accessible from other Unix hosts.
  750.  
  751.    Local printing is allowing users on your machine to send print jobs
  752. to a printer attached to your machine.
  753.  
  754.    There is a third combination too - your own use of remote printing
  755. on other Unix machines. That is, where you wish to print on a printer
  756. that is not attached to your own computer.
  757.  
  758. 3.1.2 What You Need
  759. -------------------
  760.  
  761.    This document assumes you know how to edit a text file under Linux,
  762. and that you have a basic understanding of file ownership and
  763. permissions.
  764.  
  765.    It also assumes that you have your Linux system set up and running
  766. correctly.  In particular, if you are going to use remote printing your
  767. networking subsystems must be installed and operating correctly.
  768.  
  769.    Check out the man pages on the commands `chmod' and `chown' for more
  770. information.
  771.  
  772. 3.1.3 How Printing Works Under Linux
  773. ------------------------------------
  774.  
  775.    The simplest way to print under Unix (and thus under Linux) is to
  776. send the print data directly to the printer device. This command will
  777. send a directory listing to the first parallel printer (LPT1: in DOS
  778. terms):
  779.  
  780.      ls > /dev/lp0
  781.  
  782.    This method does not take advantage of the multitasking capabilities
  783. of Linux, because the time taken for this command to finish will be
  784. however long it takes the printer to actually physically print the
  785. data. On a slow printer, or a printer which is deselected or
  786. disconnected, this could be a long time.
  787.  
  788.    A better method is to spool the data. That is, to collect the print
  789. data into a file, then start up a background process to send the data
  790. to the printer.
  791.  
  792.    This is essentially how Linux works. For each printer, a spool area
  793. is defined.  Data for the printer is collected in the spool area, one
  794. file per print job.  A background process (called the printer daemon)
  795. constantly scans the spool areas for new files to print. When one
  796. appears, the data is sent to the appropriate printer or *despooled*.
  797. When more than one file is waiting to be printed, they will be printed
  798. in the order they were completed - first in, first out. Thus the spool
  799. area is effectively a queue, and the waiting jobs are often referred to
  800. as being "in the print queue", or "queued".
  801.  
  802.    In the case of remote printing, the data is first spooled locally as
  803. for any other print job, but the background process is told to send the
  804. data to a particular printer on a particular remote machine.
  805.  
  806.    The necessary information that the printer daemon needs to do its
  807. job - the physical device to use, the spool area to look in, the remote
  808. machine and printer for remote printing and so on - is all stored in a
  809. file called `/etc/printcap'. The details of this file are discussed
  810. below.
  811.  
  812.    In the discussions that follow, the term "printer" will be used to
  813. mean a printer as specified in `/etc/printcap'. The term "physical
  814. printer" will be used to mean the thing that actually puts characters on
  815. paper. It is possible to have multiple entries in `/etc/printcap' which
  816. all describe one physical printer, but do so in different ways. If this
  817. is not clear to you, read the section on `/etc/printcap'.
  818.  
  819. 3.1.4 The important programs
  820. ----------------------------
  821.  
  822.    There are five programs which comprise the Unix print system. They
  823. should be in the locations shown, should all be owned by root and
  824. belong to the group daemon and have the permissions shown here:
  825.  
  826.          -rwsr-sr-x    /usr/bin/lpr
  827.          -rwsr-sr-x    /usr/bin/lpq
  828.          -rwsr-sr-x    /usr/bin/lpc
  829.          -rwsr-sr-x    /usr/bin/lprm
  830.          -rwxr-s---    /etc/lpd
  831.  
  832.    The first four are used to submit, cancel and inspect print jobs.
  833. `/etc/lpd' is the printer daemon.
  834.  
  835.    (The locations, ownerships and permissions given here are a
  836. simplification and may be wrong for your system *note lpd files and
  837. permissions.)
  838.  
  839.    There are man pages for all these commands, which you should consult
  840. for more information. The important points are that by default `lpr',
  841. `lprm', `lpc' and `lpq' will operate on a printer called `lp'. If you
  842. define an environment variable called `PRINTER', the name thus defined
  843. will be used instead. Both these may be overridden by specifying the
  844. printer name to use on the command line thus:
  845.  
  846.      lpc -PMYPRINTER
  847.  
  848. 3.1.5 The `lpr' Command
  849. -----------------------
  850.  
  851.    The `lpr' command submits a job to the printer, or "queues a print
  852. job". What actually happens is that the file you specify is copied to
  853. the spool directory (see above), where it will be found by `lpd', which
  854. then takes care of moving the data to the physical printer. If you don't
  855. specify a file, `lpr' uses standard input.
  856.  
  857. 3.1.6 The `lpq' Command
  858. -----------------------
  859.  
  860.    The `lpq' command shows you the contents of the spool directory for
  861. a given printer. One important piece of information displayed by `lpq'
  862. is the job id, which identifies a particular job. This number must be
  863. specified if you wish to cancel a pending job.
  864.  
  865.    `lpq' also shows a rank for each job in the queue - "active" means
  866. the file is actually printing (or at least that `lpd' is trying to
  867. print it). Otherwise a number shows you where in the queue the job is.
  868.  
  869. 3.1.7 The `lprm' Command
  870. ------------------------
  871.  
  872.    The `lprm' command removes a job from the queue - that is, it
  873. removes unprinted files from the spool directory. You can either specify
  874. a job id (obtained by using the `lpq' command) or specify `-' as the
  875. job id, in which case all jobs belonging to you will be cancelled. If
  876. you do this as root, all jobs for the printer will be cancelled. If you
  877. are root and want to remove all the jobs belonging to a specific user,
  878. specify the user's name.
  879.  
  880. 3.1.8 The `lpc' Command
  881. -----------------------
  882.  
  883.    The `lpc' command lets you check the status of printers and control
  884. some aspects of their use. In particular it lets you start and stop
  885. despooling on printers, lets you enable or disable printers and lets you
  886. rearrange the order of jobs in a print queue. The following commands
  887. disable printing on myprinter, enable the spool queue on yourprinter and
  888. move job number 37 to the top of the queue:
  889.  
  890.      lpc down myprinter
  891.      lpc enable yourprinter
  892.      lpc topq 37
  893.  
  894.    If invoked without any command arguments, lpc will be interactive,
  895. prompting you for actions to take. Read the man page for complete
  896. instructions. Bear in mind that some `lpc' functions are restricted to
  897. root.
  898.  
  899. 3.1.9 The Important Directories
  900. -------------------------------
  901.  
  902.    There is really only one important directory - the spool area where
  903. data to be printed is accumulated before `/etc/lpd' prints it. However,
  904. typically a system will be set up with multiple spool directories, one
  905. for each printer. This makes printer management easier. My system is set
  906. up to use `/usr/spool/lpd' as the main spool area, with each separate
  907. printer having a directory under that with the same name as the
  908. printer. Thus I have a printer called `ps_nff' which has
  909. `/usr/spool/lpd/ps_nff' as its spool directory and so on.
  910.  
  911.    The spool directories should belong to the daemon group and be user
  912. and group read/writable, and world -readable. That is, after creating
  913. the directory make sure it has permissions "-rwxrwxr-x" (0775). For the
  914. directory myprinter, the appropriate command would be:
  915.  
  916.      chmod ug=rwx,o=rx myprinter
  917.      chgrp daemon myprinter
  918.  
  919.    (The locations, ownerships and permissions given here are a
  920. simplification and may be wrong for your system *note lpd files and
  921. permissions.)
  922.  
  923. 3.1.10 The Important Files
  924. --------------------------
  925.  
  926.    Apart from the programs discussed above, each spool directory should
  927. contain four files - `.seq', `errs'. `lock' and `status'. These files
  928. should have the permissions "-rw-rw-r-". The `.seq' file contains the
  929. job number counter for `lpr' to assign a and the `status' file contains
  930. the message to be reported by `lpc stat'. The `lock' file is used by
  931. `lpd' to prevent itself trying to print two jobs to the same printer at
  932. once, and the `errs' file is a log of printer failures.
  933.  
  934.    The file `errs' is not required and can actually be called whatever
  935. you like - the name is specified in `/etc/printcap', but the file must
  936. exist for `lpd' to be able to log to it, so it is usually created
  937. manually when setting up the spool area. More on this later.
  938.  
  939.    One very important file is the file `/etc/printcap', which is
  940. described in detail in the following sections.
  941.  
  942. 3.1.11 More About /etc/printcap
  943. -------------------------------
  944.  
  945.    The file `/etc/printcap' is a text file, which may be edited with
  946. your favourite editor. It should be owned by root and have the
  947. permissions "-rw-r-r-".
  948.  
  949.    The contents of `/etc/printcap' are typically very cryptic-looking,
  950. but once you know how it works they are much easier to understand. The
  951. problem is compounded by the fact that in some braindead distributions
  952. there is no man page for printcap, and the fact that most printcaps are
  953. created either by programs or by people with no thought for
  954. readability. For your own sanity, I recommend making the layout of your
  955. printcap file as logical and readable as possible, with lots of
  956. comments. And get the a man page from the lpd sources, if you don't
  957. already have it.
  958.  
  959.    One printcap entry describes one printer. Essentially a printcap
  960. entry provides a logical name for a physical device, then describes how
  961. data to be sent to that device is to be handled. For example, a printcap
  962. entry will define what physical device is to be used, what spool
  963. directory data for that device should be stored in, what preprocessing
  964. should be performed on the data, where errors on the physical device
  965. should be logged and so forth. You can limit the amount of data which
  966. may be sent in a single job, or limit access to a printer to certain
  967. classes of user.
  968.  
  969.    It is perfectly OK to have multiple printcap entries defining several
  970. different ways to handle data destined for the same physical printer.
  971. For example, a physical printer may support both PostScript and HP
  972. Laserjet data formats, depending on some setup sequence being sent to
  973. the physical printer before each job. It would make sense to define two
  974. printers, one of which preprocesses the data by prepending the HP
  975. LaserJet sequence while the other prepends the PostScript sequence.
  976. Programs which generate HP data would send it to the HP printer, while
  977. programs generating PostScript would print to the PostScript printer.
  978.  
  979.    Programs which change the data before it is sent to the physical
  980. printer are called "filters".  It is possible for a filter to send no
  981. data at all to a physical printer.
  982.  
  983.    See Also: The Syntax of /etc/printcap
  984.  
  985.      # Sample printcap entry with two aliases
  986.      myprinter|laserwriter:\
  987.          # lp is the device to print to - here the first parallel printer.
  988.          :lp=/dev/lp0: \
  989.          # sd means 'spool directory' - where print data is collected
  990.          :sd=/usr/spool/lpd/myprinter:
  991.  
  992. 3.1.12 Fields in `/etc/printcap'
  993. --------------------------------
  994.  
  995.    There are too many fields to describe here in full, so I'll just
  996. describe the most important ones. All fields in `/etc/printcap' (except
  997. for the names of the printer) are enclosed between a pair of colons and
  998. are denoted by a two-letter code. The two-letter code is followed by a
  999. value that depends on the type of field. There are three types of field
  1000. - string, boolean and numeric See Also: The Syntax of /etc/printcap.
  1001.  
  1002.    The following fields are the most common and most important ones:
  1003.  
  1004.      lp      string          specify the device to print to, eg /dev/lp0
  1005.      sd      string          specify the name of the spool directory for
  1006.                              this printer
  1007.      lf      string          specify the file to which errors on this
  1008.                              printer are to be logged
  1009.      if      string          specify the input filter name
  1010.      rm      string          specify the name of a remote printing host
  1011.      rp      string          specify the name of a remote printer
  1012.      sh      boolean         specify this to suppress headers (banner pages)
  1013.      sf      boolean         specify this to suppress end-of-job form feeds
  1014.      mx      numeric         specify the maximum allowable print job size
  1015.                              (in blocks)
  1016.  
  1017. 3.1.13 More on The `lp' Field
  1018. -----------------------------
  1019.  
  1020.    If you specify `/dev/null' as the print device, all other processing
  1021. will be performed correctly, but the final data will go to the bit
  1022. bucket. This is rarely useful except for test printer configurations or
  1023. with weird printers See Also: Printers not in /dev. When you are setting
  1024. up a remote printer (that is, you have specified `rm' and `rp' fields),
  1025. you should specify `:lp=:'.
  1026.  
  1027.    Don't leave the field empty unless you are using a remote printer.
  1028. The printer daemon will complain if you don't specify a print device.
  1029.  
  1030. 3.1.14 More On The lf Field
  1031. ---------------------------
  1032.  
  1033.    Whatever file you specify should already exist, or logging will not
  1034. occur.
  1035.  
  1036. 3.1.15 More On The if Field
  1037. ---------------------------
  1038.  
  1039.    Input filters are programs which take print data on their standard
  1040. input and generate output on their standard output. A typical use of an
  1041. input filter is to detect plain text and convert it into PostScript.
  1042. That is, raw text is its input, PostScript is its output. See Also: Writing
  1043. lpd filters.
  1044.  
  1045.    When you specify an input filter, the printer daemon does *not* send
  1046. the spooled print data to the specified device. Instead, it runs the
  1047. input filter with the spooled data as standard input and the print
  1048. device as standard output. (For another use for input filters *note A
  1049. test printcap entry.).
  1050.  
  1051. 3.1.16 More On The `rm' and `rp' Fields
  1052. ---------------------------------------
  1053.  
  1054.    Sending your print data to a printer attached to another machine is
  1055. as simple as specifying the remote machine `rm' and the remote printer
  1056. `rp', and making sure that the print device field `lp' is empty. Note
  1057. that data will still be spooled locally before being transferred to the
  1058. remote machine, and any input filters you specify will be run also.
  1059.  
  1060. 3.1.17 More On The `sh' and `sf' Fields
  1061. ---------------------------------------
  1062.  
  1063.    Unless you have a lot of different people using your printer, you
  1064. will most likely not be interested in banner pages.
  1065.  
  1066.    Suppressing form feeds is most useful if your printer is typically
  1067. used for output from wordprocessing packages. Most WP packages create
  1068. complete pages of data, so if the printer daemon is adding a form feed
  1069. to the end of each job, you will get a blank page after each job. If the
  1070. printer is usually used for program or directory listings, however,
  1071. having that form feed ensures that the final page is completely ejected,
  1072. so each listing starts at the top of a new page.
  1073.  
  1074. This is Info file Printing-HOWTO.info, produced by Makeinfo-1.55 from
  1075. the input file printing.texinfo.
  1076.  
  1077.    A guide to printing and previewing files under the Linux operating
  1078. system.
  1079.  
  1080.    Copyright (C) 1994 by Grant Taylor and Brian McCauley
  1081.  
  1082. 3.1.18 More On The `mx' Field
  1083. -----------------------------
  1084.  
  1085.    This field allows you to limit the size of the print data to be
  1086. spooled. The number you specify is in BUFSIZE blocks (1K under Linux).
  1087. If you specify zero, the limit is removed, allowing print jobs to be
  1088. limited only by available disk space. Note that the limit is on the
  1089. size of the spooled data, *not* the amount of data sent to the physical
  1090. printer. If a user tries to exceed this limit the file is tuncated. The
  1091. user will see a message saying "lpr: <filename>: copy file is too
  1092. large".
  1093.  
  1094.    For text physical printers, this is useful if you have users or
  1095. programs that may deliberately or accidentally create excessively large
  1096. output, but in most cases is not really very applicable.
  1097.  
  1098.    For PostScript physical printers, the limit is not useful at all,
  1099. because a very small amount of spooled PostScript data can generate a
  1100. large number of output pages.
  1101.  
  1102. 3.1.19 A Test Printcap Entry
  1103. ----------------------------
  1104.  
  1105.    The following shell script is a very simple input filter - it simply
  1106. concatenates its input onto the end of a file in `/tmp' after an
  1107. appropriate banner. We specify this filter in our printcap entry and
  1108. specify `/dev/null' as the print device. The print device will never
  1109. actually be used, but we have to set it to something because otherwise
  1110. the printer daemon will complain.
  1111.  
  1112.      #!/bin/sh
  1113.      # This file should be placed in the printer's spool directory and
  1114.      # named input_filter. It should be owned by root, group daemon, and be
  1115.      # world executable (-rwxr-xr-x).
  1116.      echo ------------------------------------------------ >> /tmp/testlp.out
  1117.      date                                                  >> /tmp/testlp.out
  1118.      echo ------------------------------------------------ >> /tmp/testlp.out
  1119.      cat                                                   >> /tmp/testlp.out
  1120.  
  1121.    Here's the printcap entry. Notice the (reasonably) readable format
  1122. and the use of continuation characters on all but the last line:
  1123.  
  1124.      myprinter|myprinter: \
  1125.          :lp=/dev/null: \
  1126.          :sd=/usr/spool/lpd/myprinter: \
  1127.          :lf=/usr/spool/lpd/myprinter/errs: \
  1128.          :if=/usr/spool/lpd/myprinter/input_filter: \
  1129.          :mx#0: \
  1130.          :sh: \
  1131.          :sf:
  1132.  
  1133. 3.1.20 Putting It All Together
  1134. ------------------------------
  1135.  
  1136.    Putting all the above bits together, here is a step by step guide to
  1137. setting up a single printer on `/dev/lp0'. You can then extend this to
  1138. other printers.  You have to be root do do all this, by the way.
  1139.  
  1140.   1. Check the permissions and locations of `lpr', `lprm', `lpc', `lpq'
  1141.      and `lpd' See Also: The important programs.
  1142.  
  1143.   2. Create the spool directory for your printer, which we will call
  1144.      `myprinter' for now. Make sure both are owned by root, group
  1145.      daemon, and are user and group writeable, readonly for others
  1146.      (-rwxrwxr-x).
  1147.  
  1148.           mkdir /usr/spool/lpd /usr/spool/lpd/myprinter
  1149.           chown root.daemon /usr/spool/lpd /usr/spool/lpd/myprinter
  1150.           chmod ug=rwx,o=rx /usr/spool/lpd /usr/spool/lpd/myprinter
  1151.  
  1152.   3. In the directory `/usr/spool/lpd/myprinter', create the necessary
  1153.      files and give them the correct permissions and owner:
  1154.  
  1155.           cd /usr/spool/lpd/myprinter
  1156.           touch .seq errs status lock
  1157.           chown root.daemon .seq errs status lock
  1158.           chmod ug=rw,o=r .seq errs status lock
  1159.  
  1160.   4. Create the shell script input_filter in the directory
  1161.      `/usr/spool/lpd/myprinter'. Use the input filter given above. Make
  1162.      sure that the file is owned by root, group daemon, and is
  1163.      executable by anyone.
  1164.  
  1165.           cd /usr/spool/lpd/myprinter
  1166.           chmod ug=rwx,o=rx input_filter
  1167.  
  1168.   5. Create the file `/etc/printcap' if it doesn't already exist. Remove
  1169.      all entries in it and add the test printcap entry given above.
  1170.      Make sure the file is owned by root, and readonly to everyone else
  1171.      (-rw-r-r-).
  1172.  
  1173.   6. Edit the file `rc.local'. Add the line `/etc/lpd' to the end. This
  1174.      will run the printer daemon each time the system boots. It is not
  1175.      necessary to boot now though - just run it by hand:
  1176.           lpd
  1177.  
  1178.   7. Do a test print:
  1179.           ls -l | lpr -Pmyprinter
  1180.  
  1181.   8. Look in `/tmp' for a file called `testlp.out' - it should contain
  1182.      your directory listing.
  1183.  
  1184.   9. Edit `/etc/printcap'. Copy the myprinter entry, so you have two
  1185.      identical entries.
  1186.  
  1187.         * in the *first* entry, change both occurrences of `myprinter'
  1188.           to `testlp' in the first line only
  1189.  
  1190.         * in the *second* entry, change `/dev/null' to your real print
  1191.           device, eg., `/dev/lp0'
  1192.  
  1193.         * in the *second* entry, remove the `if' line completely
  1194.  
  1195.  10. Either reboot the system or kill the printer daemon and restart it.
  1196.      This is because the printer daemon only looks at the /etc/printcap
  1197.      file when it first starts up.
  1198.  
  1199.  11. Do a test print again - this one should come out on your physical
  1200.      printer!
  1201.           ls -l | lpr -Pmyprinter
  1202.  
  1203. 3.1.21 More On Remote Printing
  1204. ------------------------------
  1205.  
  1206.    In order for any other machines to print using your printers, their
  1207. names will have to be registered in either the file `/etc/hosts.equiv'
  1208. or `/etc/hosts.lpd'.  These are simple text files, one host name per
  1209. line.
  1210.  
  1211.    For preference, add hosts to `/etc/hosts.lpd'. `/etc/hosts.equiv' is
  1212. used to give far wider access rights, and should be avoided wherever
  1213. possible.
  1214.  
  1215.    You can restrict remote users either by group name (specify the
  1216. groups permitted using one or more rg fields in `/etc/printcap' -
  1217. `:rg=admin:' will restrict access to a printer to those users belonging
  1218. to the group admin.  You can also restrict access to those users with
  1219. accounts on your system, by specifying the boolean flag `:rs:' in your
  1220. `/etc/printcap'.
  1221.  
  1222. 3.1.22 The Fiddly Bits
  1223. ----------------------
  1224.  
  1225.    If all the above worked, you will now have two printers defined in
  1226. `/etc/printcap' - one called testlp, which appends output to
  1227. `/tmp/testlp.out', and one called myprinter which sends unmodified
  1228. output to the physical printer attached to `/dev/lp0'. Both share the
  1229. same spool directory. As an exercise, you might like to set up a
  1230. separate spool directory for the testlp printer.
  1231.  
  1232.    If your printer is a PostScript printer, it may not be able to handle
  1233. plain text. If this is the case, you'll need to set up a filter to
  1234. convert plain text to PostScript. An excellent freeware program called
  1235. nenscript is available which does just this. See Also: PostScript. If you
  1236. don't set up such a filter, you will have to make sure by other means
  1237. that the printer is sent only PostScript.
  1238.  
  1239.    You may like to add a line to your login script - or even to the
  1240. default user login script - which sets up a `PRINTER' environment
  1241. variable. Under bash, a suitable line would be `export
  1242. PRINTER=myprinter'. This will prevent people having to specify
  1243. `-Pmyprinter' every time they submit a print job.
  1244.  
  1245.    To add more printers, just repeat the above process with different
  1246. printer names. Remember you can have multiple printcap entries all using
  1247. the same physical device. This lets you treat the same device
  1248. differently, depending on what you call it when you submit a print job
  1249. to it.
  1250.  
  1251.    It is possible to "reuse" a printcap entry. If you specify your own
  1252. machine as the remote host and another printer in your printcap file as
  1253. the remote printer, you can effectively redirect print data from one
  1254. printer to another.  Remember if you use this technique that all the
  1255. data will be processed by all input filters in the chain and spooled for
  1256. each printer it goes through.
  1257.  
  1258.    Although you can specify as many aliases for a printer as you like,
  1259. it seems that for maximum usefulness the first two should be the same
  1260. and should be the "real" printer name. Many programs will only ever use
  1261. one of these two aliases.  The `lpc' command will only report on the
  1262. first alias, though `lpc', `lpr', `lprm' and `lpq' all understand any
  1263. alias.
  1264.  
  1265.    Rather than specify a maximum spool file size, you may want instead
  1266. to prevent spool files expanding to fill your disk, even temporarily.
  1267. To do so, put a file called minfree in each spool directory, specifying
  1268. the amount of disk space that must remain for spooling data to be
  1269. accepted. This file is a simple text file, containing the number of
  1270. blocks to be left free. Usually this file is a link to a file in the
  1271. main spool directory, as it is rare for different printers to have
  1272. different minimums.
  1273.  
  1274. 3.1.23 Troubleshooting
  1275. ----------------------
  1276.  
  1277.    Problem: You get a message saying "lpd: connect: No such file or
  1278. directory"
  1279.  
  1280.    Answer: The printer daemon `/etc/lpd' is not running. You may have
  1281. forgotten to add it to your `/etc/rc.local' file. Alternatively you did
  1282. add it, but haven't booted since. Add it and reboot, OR just run
  1283. /etc/lpd. Remember you have to be root to do this. See Also: lpd not
  1284. working.
  1285.  
  1286.    Problem: You get a message saying "Job queued, but cannot start
  1287. daemon".
  1288.  
  1289.    Answer: This often appears right after the "lpd: connect" message.
  1290. Same problem.
  1291.  
  1292.    Problem: You get a message saying "lpd: cannot create
  1293. <spooldir>/.seq".
  1294.  
  1295.    Answer: You have not created the spool directory specified in the
  1296. printcap entry or have misnamed it. An alternative (though much less
  1297. likely) answer is that you have too little disk space left.
  1298.  
  1299.    Problem: You get a message saying "lpr: Printer queue is disabled".
  1300.  
  1301.    Answer: As root, use `lpc enable <PRINTERNAME>' to enable the
  1302. printer. Note that as root, you can submit jobs even to a disabled
  1303. printer.
  1304.  
  1305.    Problem: You submit a print job, there are no error messages, but
  1306. nothing comes out on the physical printer.
  1307.  
  1308.    Answer: There could be many reasons. Make sure the physical printer
  1309. is switched on, selected, and physically connected to the device
  1310. specified in the `/etc/printcap' file. Use the `lpq' command to see
  1311. whether the entry is in the queue. If it is, then the device may be
  1312. busy, the printer may be down, or there may be an error on the printer.
  1313. Check the error log specified in the printcap entry for clues. You can
  1314. use the `lpc status' command to check whether the printer is down and
  1315. `lpc up <PRINTERNAME>' to bring it back up if it is (you need to be
  1316. root to do this).
  1317.  
  1318.    If after checking as suggested your print jobs still do not come out,
  1319. double check that any input filter you have specified is present in the
  1320. correct directory and has the correct permissions. If you are running
  1321. syslogd, you can look in your logs for messages from lpd. If you see log
  1322. entries saying "cannot execv <name of input filter>", then this is
  1323. almost certainly the problem.
  1324.  
  1325.    Another possibility is that your printer is a PostScript printer and
  1326. you are not sending PostScript to it. Most PostScript printers will
  1327. ignore non-PostScript data. You may need to install an appropriate
  1328. text-to-PostScript input filter.
  1329.  
  1330.    Lastly (and you'll feel really silly if this is the cause!) check
  1331. that your input filter actually generates output and that the output
  1332. device is not `/dev/null'.
  1333.  
  1334.    Problem: When remote printing, your jobs go into the remote queue
  1335. but never get physically printed.
  1336.  
  1337.    Answer: If you can, look at the entry for the remote printer in the
  1338. `/etc/printcap' file on the remote machine. It may be restricting your
  1339. access.  The `rg' field restricts access to members of a specific group
  1340. which you may not be in, and the `rs' field prevents access from users
  1341. without accounts on the remote machine, which you may not have.
  1342. Alternatively the printer on the remote machine may have been downed by
  1343. the system administrator. See Also: lpr over a network.
  1344.  
  1345. [End of Part 1/2]
  1346.